import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 * Klasa Dziedzicząca po JTable. Służy do specyficznego przedstawiania widoku wydarzeń.
 * @author krzys
 *
 */
public class EventsView extends JTable {
	/**Nagłówki rzędów zawierające godziny w odstępach co 30 min*/
	private String hours[];
	/**Typ ustawianego widoku, oznacza załadowanie nagłówka rzędów*/
	static int HOUR_VIEW = 1;
	/**Typ ustawianego widoku, oznacza załadowanie zwykłego modelu*/
	static int SORT_VIEW = 2;
	/**
	 * Inicjalizuje obiekt klasy EventsView bez załadowanego modelu.
	 */
	EventsView ()
	{
		super();
		hours = new String [48];
		for (int h=0,j=0 ; h<24 ; h++,j+=2)
		{
			hours[j]=String.valueOf(h)+":00";
			hours[j+1]=String.valueOf(h)+":30";
		}
	}
	/**
	 * Ustawia model do wyświetlenia w podany sposób.
	 * @param model	Model, który ma być wyświetlany.
	 * @param type	Sposób wyświetlania wartośći: EventsView.HOUR_VIEW oraz EventsView.SORTED_VIEW
	 */
	public void setModel (DefaultTableModel model, int type)
	{
		if (type==EventsView.HOUR_VIEW)
		{
			model.addColumn("Czas", hours);
			super.setModel(model);
			this.moveColumn(model.getColumnCount()-1, 0);
			adjustToContent();
			this.getColumnModel().getColumn(0).setMaxWidth(50);
		}
		else if (type == EventsView.SORT_VIEW)
		{
			super.setModel(model);
		}
	}
	/**
	 * Dopasowuje szerokości rzędów do załadowanego modelu poprzez zliczenie znaczników nowej linii w każdej komórce.
	 */
	private void adjustToContent ()
	{
		for (int col=0 ; col<this.getColumnCount()-1;col++)//dla kazdej kolumny
		{
			for (int row = 0 ; row < this.getRowCount() ; row++)//i kazdego wiersza
			{
				int newHeight=0;
				newHeight=getBrCount((String)this.getModel().getValueAt(row, col))*16;
				if (newHeight>=this.getRowHeight(row))//jezeli nowa wysokosc jest wieksza od obecnej to ustaw
				{
					this.setRowHeight(row, newHeight);
				}
				
			}
		}
	}
	
	private int getBrCount (String s)
	{
		
		int count = 0,index=0;
		do
		{
			if (s!=null){
			index=s.indexOf("<br>", index);
			count++;
			index++;}
		}while (index>0);
		if (count==0) return 1;
		return count-1;
	}

}
